home *** CD-ROM | disk | FTP | other *** search
/ Delphi Developer's Kit 1996 / Delphi Developer's Kit 1996.iso / power / wfc007.000 / src / curl.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1995-12-22  |  4.6 KB  |  235 lines

  1. #include <wfc.h>
  2. #pragma hdrstop
  3.  
  4. /*
  5. ** Author: Samuel R. Blackburn
  6. ** CI$: 76300,326
  7. ** Internet: sammy@sed.csc.com
  8. **
  9. ** You can use it any way you like.
  10. */
  11.  
  12. #if defined( _DEBUG )
  13. #undef THIS_FILE
  14. static char BASED_CODE THIS_FILE[] = __FILE__;
  15. #endif
  16.  
  17. IMPLEMENT_SERIAL( CUniformResourceLocator, CObject, 1 );
  18.  
  19. CUniformResourceLocator::CUniformResourceLocator()
  20. {
  21.    Empty();
  22. }
  23.  
  24. CUniformResourceLocator::CUniformResourceLocator( const CUniformResourceLocator& source )
  25. {
  26.    Copy( source );
  27. }
  28.  
  29. CUniformResourceLocator::CUniformResourceLocator( const CUniversalNamingConvention& source )
  30. {
  31.    Copy( source );
  32. }
  33.  
  34. CUniformResourceLocator::CUniformResourceLocator( LPCTSTR source )
  35. {
  36.    Copy( source );
  37. }
  38.  
  39. CUniformResourceLocator::~CUniformResourceLocator()
  40. {
  41.    Empty();
  42. }
  43.  
  44. int CUniformResourceLocator::Compare( const CUniformResourceLocator& source )
  45. {
  46.    ASSERT_VALID( this );
  47.  
  48.    return( URL.CompareNoCase( source.URL ) );
  49. }
  50.  
  51. void CUniformResourceLocator::Copy( const CUniformResourceLocator& source )
  52. {
  53.    ASSERT_VALID( this );
  54.  
  55.    ProtocolName = source.ProtocolName;
  56.    MachineName  = source.MachineName;
  57.    PathName     = source.PathName;
  58.    PortName     = source.PortName;
  59.    URL          = source.URL;
  60. }
  61.  
  62. void CUniformResourceLocator::Copy( const CUniversalNamingConvention& source )
  63. {
  64.    ASSERT_VALID( this );
  65.  
  66.    Empty();
  67.  
  68.    ProtocolName = "file";
  69.    MachineName  = source.ServerName;
  70.    PathName     = source.ShareName;
  71.    PathName    += "/";
  72.    PathName    += source.PathName;
  73.  
  74.    /*
  75.    ** Now go through PathName to make sure it has /'s instead of \'s
  76.    */
  77.  
  78.    int location_of_slash = 0;
  79.  
  80.    while( location_of_slash < PathName.GetLength() )
  81.    {
  82.       if ( PathName[ location_of_slash ] == '\\' )
  83.       {
  84.          PathName.SetAt( location_of_slash, '/' );
  85.       }
  86.  
  87.       location_of_slash++;
  88.    }
  89.  
  90.    Make();
  91. }
  92.  
  93. void CUniformResourceLocator::Copy( LPCTSTR source )
  94. {
  95.    ASSERT_VALID( this );
  96.    ASSERT( source != NULL );
  97.  
  98.    Empty();
  99.  
  100.    if ( source == NULL )
  101.    {
  102.       return;
  103.    }
  104.  
  105.    CString temp_string = source;
  106.  
  107.    int location = temp_string.Find( ':' );
  108.  
  109.    if ( location == (-1) )
  110.    {
  111.       return;
  112.    }
  113.  
  114.    ProtocolName = temp_string.Left( location );
  115.  
  116.    temp_string = temp_string.Right( ( temp_string.GetLength() - location ) - 1 );
  117.  
  118.    while( temp_string[ 0 ] == '/' )
  119.    {
  120.       temp_string = temp_string.Right( temp_string.GetLength() - 1 );
  121.    }
  122.  
  123.    location = temp_string.Find( '/' );
  124.  
  125.    if ( location == (-1) )
  126.    {
  127.       MachineName = temp_string;
  128.    }
  129.    else
  130.    {
  131.       MachineName = temp_string.Left( location );
  132.       PathName    = temp_string.Right( ( temp_string.GetLength() - location ) - 1 );
  133.    }
  134.  
  135.    /*
  136.    ** Now see if MachineName has a PortName in it
  137.    */
  138.  
  139.    location = MachineName.Find( ':' );
  140.  
  141.    if ( location != (-1) )
  142.    {
  143.       PortName    = MachineName.Right( ( MachineName.GetLength() - location ) - 1 );
  144.       MachineName = MachineName.Left( location );
  145.    }
  146.  
  147.    Make();
  148. }
  149.  
  150. void CUniformResourceLocator::Empty( void )
  151. {
  152.    ASSERT_VALID( this );
  153.  
  154.    ProtocolName.Empty();
  155.    MachineName.Empty();
  156.    PathName.Empty();
  157.    PortName.Empty();
  158.    URL.Empty();
  159. }
  160.  
  161. void CUniformResourceLocator::Make( void )
  162. {
  163.    ASSERT_VALID( this );
  164.  
  165.    URL  = ProtocolName;
  166.    URL += "://";
  167.    URL += MachineName;
  168.  
  169.    if ( PortName != "" )
  170.    {
  171.       URL += ":";
  172.       URL += PortName;
  173.    }
  174.  
  175.    URL += "/";
  176.    URL += PathName;
  177. }
  178.  
  179. void CUniformResourceLocator::Serialize( CArchive& archive )
  180. {
  181.    CObject::Serialize( archive );
  182.  
  183.    if ( archive.IsStoring() )
  184.    {
  185.       archive << ProtocolName;
  186.       archive << MachineName;
  187.       archive << PathName;
  188.       archive << PortName;
  189.       archive << URL;
  190.    }
  191.    else
  192.    {
  193.       archive >> ProtocolName;
  194.       archive >> MachineName;
  195.       archive >> PathName;
  196.       archive >> PortName;
  197.       archive >> URL;
  198.    }
  199. }
  200.  
  201. CUniformResourceLocator& CUniformResourceLocator::operator = ( const CUniformResourceLocator& source )
  202. {
  203.    ASSERT_VALID( this );
  204.    Copy( source );
  205.    return( *this );
  206. }
  207.  
  208. CUniformResourceLocator& CUniformResourceLocator::operator = ( const CUniversalNamingConvention& source )
  209. {
  210.    ASSERT_VALID( this );
  211.    Copy( source );
  212.    return( *this );
  213. }
  214.  
  215. CUniformResourceLocator& CUniformResourceLocator::operator = ( LPCTSTR source )
  216. {
  217.    ASSERT_VALID( this );
  218.    Copy( source );
  219.    return( *this );
  220. }
  221.  
  222. BOOL CUniformResourceLocator::operator == ( const CUniformResourceLocator& right_url )
  223. {
  224.    ASSERT_VALID( this );
  225.  
  226.    if ( Compare( right_url ) == 0 )
  227.    {
  228.       return( TRUE );
  229.    }
  230.    else
  231.    {
  232.       return( FALSE );
  233.    }
  234. }
  235.